#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>

int code=0;

int main(void)
{
    pid_t id=fork();
    if(id<0)
    {
        perror("fork");
        exit(1);//表示进程运行完毕，结果不正确
    }
    else if(id==0)
    {
        int cnt=5;
        while(cnt)
        {
            printf("cnt:%d , I am child, pid:%d, ppid:%d \n",cnt,getpid(),getppid());
            cnt--;
            sleep(1);
           // int a=10;
            // a /=0;
        }
        code=111;
        exit(111);//终止子进程

    }
    else{

        printf("I am parent, pid:%d, ppid:%d\n",getpid(),getppid());
        //sleep(7);
        int status=0;
        pid_t ret=waitpid(id,&status,0);//注意此处父进程获取得的id即子进程id，详细请了解fork返回值。
        //pid_t ret=wait(NULL);//阻塞式等待
        if(ret>0)
        {
            printf("code:%d\n",code);
            printf("wait child process successfully!,ret:%d,signal:%d, status:%d\n",ret,(status&0X7F),(status>>8)&0XFF);
        }
        //使用wait:可以不用让父进程做死循环等待了
        //while(1)
        //{
        //    printf("I am parent, pid:%d ,ppid:%d \n",getpid(),getppid());
        //    sleep(1);
        // }
    }
    return 0;
}


//int main()
//{
//    printf("you can see me.");
//    sleep(3);
//   _exit(11);
//    //return 11;
//}
